您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

因一个代码拼写错误,17 个生产级数据库被误删、瘫痪 10 小时!

时间:2023-06-06 10:55:55  来源:CSDN  作者:

整理 | 禾木木 责编 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

5 月 24 日,微软 Azure DevOps 在巴西南部(SBR)区域内一处 scale-unit(微软 Azure 部署架构中最小的容量单元)设施发生瘫痪,持续了 10 个小时。

6 月 2 日,微软首席软件工程经理 Eric Mattingly 为这次故障出面道歉,并透露了具体原因:一个简单的错误拼写,导致了整整 17 个生产级数据库被删除。

“ 隐藏 ”着一条拼写错误

Mattingly 解释道,Azure DevOps 工程师偶尔会对生产级数据库的快照进行保存,以查看报告上的问题或测试性能改进。为清理这些快照数据库,会有专门的后台每天运行,系统会在一段设定的时间后删除旧快照。

在最近的一波 sprint (敏捷开发术语中的迭代开发周期)中,Azure DevOps 工程师执行了一次代码升级,将已弃用的 Microsoft .Azure. Management.* 软件包换成受支持的 Azure.ResourceManager.* NuGet 软件包。

这个操作,连带着大量 pull request 变更请求,会将旧包中的 API 调用替换为新包中的 API 调用——而引发此次事件的拼写错误,就出现在 pull request 内,导致后台快照删除作业删掉了整个服务器。

Mattingly 表示:“这条 pull request 中的快照删除作业中, 隐藏着一条拼写错误,它会删除 Azure SQL 数据库调用,并替换成删除托管数据库的 Azure SQL Server 调用。”

按理来说,Azure DevOps 有一系列测试可发现这类问题。但 Mattingly 称,该错误代码只在某些条件下运行,因此没有被现有的测试机制及时发现。

Mattingly 表示,Azure DevOps 工程师使用安全部署实践(SDP)将 Sprint 222 部署到了 Ring 0(微软内部部署),那里不存在快照数据库,所以删除作业不会执行。但几天后,Azure DevOps 工程师又将其部署至 Ring 1(客户环境),也就是巴西南部的 scale-unit 设施。该环境中有一个比较旧的快照数据库,因此触发这个错误代码,于是它在删除 Azure SQL Server 的同时,还删掉了 scale-unit 设施中的 17 个生产级数据库。

好在,据 Mattingly 介绍,此次事件并未引发数据丢失。为了防止问题再次发生,Mattingly 称微软已采取了各种修复和重置措施,并向所有受此中断影响的客户道歉。

为何花费了 10 个小时才全部恢复?

据微软官方介绍,这 17 个生产级数据库被删后 20 分钟不到,其工程师就检测到了中断并立即开始抢修,但依旧花费了 10 个小时才完全恢复。

Mattingly 表示,这其中有几个原因:

▶ 首先,客户无法自己恢复 Azure SQL Server,因此必须由 Azure 团队来处理这项工作,这个过程对许多人来说大约需要一个小时。

▶ 其次,数据库有不同的备份配置,一些数据库被配置为 Zone 冗余备份,另一些数据库被配置为最新的 Geo-zone 冗余备份。协调这种不匹配情况给恢复过程增添了不少时间。

▶ 最后,在数据库开始重新上线后,由于 Web 服务器出现了一系列复杂的问题,即使是数据位于这些数据库中的客户,也无法访问整个 scale-unit 设施。

这些问题是服务器预热任务引起的,该任务会通过测试调用遍历可用的数据库列表。但恢复过程中的数据库抛出了一个错误,导致预热测试“执行指数级的 backoff 重试“,结果导致正常情况下只需不到 1 秒的预热过程,平均耗时了 90 分钟。

更复杂的是,整个恢复过程是交错进行的,一旦其中一两台服务器重新开始接收客户流量,就会因过载而再次停运。最终,工程师只能阻断所有流向巴西南部 scale-unit 的流量,确保一切准备就绪后,再重新加入负载均衡器并处理流量。

目前, 为防止此次事故再次发生,微软方面已实施各种修复和重新配置。Mattingly 说:“我们再次向所 有受到这次故障影响的客户道歉。”

网友:微软只是继续 “贴膏药”

尽管如此,但此次微软的道歉并没有得到网友的谅解:

▶ “看来 Azure 变得越来越复杂了,而 频繁变化加上日益增加的复杂性,最终只会走上一条路:更多的灾难以及可靠性降低。听起来微软对此事故的解决方案是继续“贴膏药”,但我认为在某个阶段,还是有必要对方法进行更根本的重新思考,避免最终分崩离析。”

甚至因为这个简单的 Bug 导致 10 小时宕机的结果,不少网友也开始讨论“云”的必要性:

▶ “关于云和 DevOps 最可怕的事情是,其实大多数文件都相当简洁,但其中总是有许多神奇的键/值,而 实际上它们在代码审查中并没有任何意义。 ”

▶ “这就是我讨厌云的众多 原因之一。十多年来,我一直没有与 IaaS 打交道的乐趣,我的本地内容非常完美,我还成功地抵御了过去十年中那些想要一次又一次将云带回来的人。 ”

对此,你又有哪些看法呢?



Tags:数据库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  Search: 数据库  点击:(5)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28  Search: 数据库  点击:(14)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  Search: 数据库  点击:(13)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12  Search: 数据库  点击:(27)  评论:(0)  加入收藏
让数据库和缓存数据保持一致的三种策略
如何保证缓存和数据库的一致性,这算得上是个老生常谈的话题啦,看到好多技术新人在写更新缓存数据代码,采用了非常复杂甚至“诡异”的方案,甚为不解。一、背景目前随着缓存架构方...【详细内容】
2024-02-20  Search: 数据库  点击:(36)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  Search: 数据库  点击:(54)  评论:(0)  加入收藏
一篇文章,彻底理解数据库操作语言:DDL、DML、DCL、TCL
本篇文章以具体的SQL语句讲解了数据库SQL语言四大分类(数据定义语言DDL,数据操作语言DML,数据查询语言DQL,数据控制语言DCL),同时也介绍了事务控制语言TCL。最近与开发和运维讨论...【详细内容】
2024-01-30  Search: 数据库  点击:(43)  评论:(0)  加入收藏
一文读懂:什么是数据库,它到底有啥用?
提到数据库,可能很多人会很陌生。但据库其实已经渗入我们生活的方方面面,像网上购物、扫码点餐、抢红包等等应用背后都离不开数据库的支持。可以说数据库是支撑各类应用软件运...【详细内容】
2024-01-25  Search: 数据库  点击:(43)  评论:(0)  加入收藏
oracle数据库基础学习
在当今数字化时代,数据库已成为企业运营的关键要素。而Oracle数据库,作为全球领先的企业级数据库管理系统,更是备受推崇。本文将带您深入了解Oracle数据库的基础知识,帮助您从零...【详细内容】
2024-01-20  Search: 数据库  点击:(90)  评论:(0)  加入收藏
一个流行的支持超多数据库的ORM库
Sequelize 是一个流行的 Node.js ORM(对象关系映射)库,用于在 Node.js 中操作关系型数据库。它支持多种数据库系统,如 PostgreSQL、MySQL、SQLite 和 MSSQL,并提供了简单易用的 A...【详细内容】
2024-01-15  Search: 数据库  点击:(77)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(6)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(13)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(9)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(11)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(9)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条